import entity.TreeNode;

public class InsertIntoBST {
    /*
    * 701. 二叉搜索树中的插入操作
    * 给定二叉搜索树（BST）的根节点 root 和要插入树中的值 value ，将值插入二叉搜索树。
    * 返回插入后二叉搜索树的根节点。 输入数据 保证 ，新值和原始二叉搜索树中的任意节点值都不同。
    * 注意，可能存在多种有效的插入方式，只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。
    *
    * 树中的节点数将在 [0, 10^4]的范围内。
    * -10^8 <= Node.val <= 10^8
    * 所有值 Node.val 是 独一无二 的。
    * -10^8 <= val <= 10^8
    * 保证 val 在原始BST中不存在。
    * */
    public static void main(String[] args){

    }

    // 我的想法： 迭代，找到null说明找到位置了，正常搜索就行
    public TreeNode mySolution(TreeNode root, int value){
        if (root == null)   // 记得非空判断啊！！！
            return new TreeNode(value);
        TreeNode cur = root;
        TreeNode parent = null;
        while (cur != null){
            if(value < cur.val) {
                parent = cur;
                cur = cur.left;
            } else {
                parent = cur;
                cur = cur.right;
            }
        }
        if(parent.val > value)
            parent.left = new TreeNode(value);
        else
            parent.right = new TreeNode(value);
        return root;
    }

    // 当然也是可以递归的
    public TreeNode insertIntoBST(TreeNode root, int value){
        if(root == null)    // 找到了
            return new TreeNode(value);

        if(root.val < value)
            root.right = insertIntoBST(root.right, value);
        else
            root.left = insertIntoBST(root.left, value);
        return root;
    }
}
